perm filename ANAREL.MAC[GPR,LCS] blob sn#138797 filedate 1975-01-06 generic text, type T, neo UTF8
	TITLE	ANAREL	Gordon Paul Ross	Raffa Edwards
	SUBTTL	DEFINATIONS

	F==0
	T1==1
	T2==2
	T3==3
	T4==4
	T5==5
	T6==6
	RELWRD==6
	VARPTR==7
	RCNT==13
	CNT==14
	WRD==15
	N==16
	P==17

	FILE.==10
	EXT.==11
	DEV.==12
	PPN.==13
	AROW.F==1
	DONE.F==2
	CHRTYP==4
	IDEV==0
	ODEV==1
	EOF==20000
	DV.DIR==4
	AC.F==400000
	IND.F==20
	INX.F==17
	PRT.F==777777
	LEN==50
	RELCNT==22


	OPDEF	.GTINS [LDB	[POINT  9,WRD,8]]
	OPDEF	.GTACM [LDB	[POINT  4,WRD,12]]
	OPDEF	.GTINX [LDB	[POINT  4,WRD,17]]
	OPDEF	.GTSYM [LDB	[POINT 32,WRD,35]]
	OPDEF	.GTPRO [LDB	[POINT 12,WRD,17]]

	DEFINE	MAKNAM(A)<
	IRP	A,<
	SIXBIT/A/
>>

	DEFINE	MAKPRT(A)<
	XWD	-1,A
>
	USRDEF==NONIMP
	REQLIB==LDREQ

	IFNDEF	FINAL,<FINAL==1>

	VGROUP==3
	VMAJOR==1
	VMINOR==1
	VEDIT==5

	LOC	137
	BYTE	(3) VGROUP (9) VMAJOR (6) VMINOR (18) VEDIT


	LOC	124
	EXP	RENTER

	RELOC
	SUBTTL	DATA

	XWD	0,NONIMP
CMD:	XWD	USRDEF,CODE
	XWD	SYMBOL,HISEG
	XWD	ENTR,ENDBLK
	XWD	NAME,STARD
	XWD	INTERN,NONIMP
	XWD	LINK,NONIMP
	XWD	NONIMP,NONIMP
	XWD	LDREQ,REQLIB
	XWD	COMMON,SPARSE
	CMDCNT==.-CMD-1

	XWD	0,NONMES
CMDMES:	XWD	USRMES,CODMES
	XWD	SYMMES,HIGMES
	XWD	ENTMES,FINMES
	XWD	NAMMES,STAMES
	XWD	INTMES,NONMES
	XWD	LNKMES,NONMES
	XWD	NONMES,NONMES
	XWD	LDRMES,REQMES
	XWD	COMMES,SPAMES

PROTYP:	XWD	UNKPRO,F40PRO
	XWD	COBPRO,ALGPRO
	XWD	NELPRO,PR1PRO
	XWD	BLIPRO,SAIPRO
	XWD	F10PRO,MACPRO
	XWD	FAIPRO,0

SPCCHR:	XWD	0,"]"
BRKTAB:	XWD	EXT,"."
	XWD	DEVICE,":"
	XWD	PPN,"["
	XWD	ARROW,"←"
	XWD	ARROW,"="
	XWD	BADCHR,","
	XWD	GETFL2,40
	XWD	GETFL2,11
LINTAB:	XWD	ARROW+2,0
	BRKCNT==.-BRKTAB-1
	LINCNT==.-LINTAB-1
	SPCCNT==.-SPCCHR-1

OPBLKI:	10
	Z
	XWD	0,IBUF

OPBLKO:	BLOCK	2
	XWD	OBUF,0

IBUF:	BLOCK	3
OBUF:	BLOCK	3
PDL:	BLOCK	LEN

ERRTAB:	XWD	NOFILE,UFDPPN
	XWD	PROTEC,FILMOD
	XWD	EXIST,ILLUUO
	XWD	DATAER,NOSAVE
	XWD	NOCORE,DEVUAV
	XWD	NOTDEV,NO2REG
	XWD	NOROOM,WLERR
	XWD	NOMCOR,PARALC
	XWD	BLKNOF,SUPDIR
	XWD	DELDIR,NOSFD
	XWD	SLEMPT,SFDLVL
	XWD	UFDEFT,LOCSEG


	IFN	FINAL,<
	XLIST
>

TYMES:	ASCIZ/TYPE /
TYMES1:	ASCIZ/TITLE:  /
TYMES2:	ASCIZ/BEGINNING ADDRESS: /
TYMES3:	ASCIZ/STARTING LOCATION: /
TYMES4:	ASCIZ/ENTRY: /
TYMES5:	ASCIZ/HIGSEG ORGIN: /
TYMES6:	ASCIZ/HISEG PSEUDO-OP/
TYMES7:	ASCIZ/TWOSEG PSEUDO-OP/
TYMES8:	ASCIZ/LOW SEGMENT ORGIN: /
TYMES9:	ASCIZ/LOW SEGMENT BREAK: /
TYMS10:	ASCIZ/LINK:    /
TYMS11:	ASCIZ/ADDRESS: /

RELMES:	ASCIZ/[ N ]/
	ASCIZ/[ R ]/
	ASCIZ/[ L ]/
	ASCIZ/[ B ]/

FILMES:	ASCIZ/FILE NAME: /
PPNMES:	ASCIZ/LOCATION:  /
DEVMES:	ASCIZ/DEVICE:    /

NONMES:	ASCIZ/  (BLOCK TYPE NOT IMPLEMENTED)/
USRMES:	ASCIZ/  (USER DEFINED BLOCK)/
CODMES:	ASCIZ/  (CODE AND DATA)/
SYMMES:	ASCIZ/  (SYMBOL TABLE)/
HIGMES:	ASCIZ/  (HISEG)/
ENTMES:	ASCIZ/  (ENTRY ADDRESS(S))/
NAMMES:	ASCIZ/  (PROGRAM NAME)/
FINMES:	ASCIZ/  (END BLOCK)/
STAMES:	ASCIZ/  (STARTING ADDRESS)/
INTMES:	ASCIZ/  (INTERNAL REQUEST)/
LNKMES:	ASCIZ/  (LINK)/
LDRMES:	ASCIZ/  (REQUEST LOAD)/
REQMES:	ASCIZ/  (REQUEST LIBRARY)/
COMMES:	ASCIZ/  (COMMON BLOCK)/
SPAMES:	ASCIZ/  (SPARSE DATA)/

UNKPRO:	ASCIZ/UNKNOWN PROGRAM SOURCE/
F40PRO:	ASCIZ/FORTRAN-40 PROGRAM/
COBPRO:	ASCIZ/COBOL PROGRAM/
ALGPRO:	ASCIZ/ALGOL-60 PROGRAM/
NELPRO:	ASCIZ/NELIAC PROGRAM/
PR1PRO:	ASCIZ .PL/1 PROGRAM .
BLIPRO:	ASCIZ/BLISS-10 PROGRAM/
SAIPRO:	ASCIZ/SAIL PROGRAM/
F10PRO:	ASCIZ/FORTRAN-10 PROGRAM/
MACPRO:	ASCIZ/MACRO PROGRAM/
FAIPRO:	ASCIZ/FAIL PROGRAM/

NOFILE:	ASCIZ/(0) FILE NOT FOUND
/
UFDPPN:	ASCIZ/(1) NO UFD FOR GIVEN PPN
/
PROTEC:	ASCIZ/(2) PROTECTION FAILURE
/
FILMOD:	ASCIZ/(3) FILE BEING MODIFIED
/
EXIST:	ASCIZ/(4) ALREADY EXISTING FILE NAME
/
ILLUUO:	ASCIZ/(5) ILLEGAL SEQUENCE OF UUO'S
/
DATAER:	ASCIZ/(6) RIB OR UFD ERROR
/
NOSAVE:	ASCIZ/(7) NOT A SAVED FILE
/
NOCORE:	ASCIZ/(10) NOT ENOUGH CORE
/
DEVUAV:	ASCIZ/(11) DEVICE NOT AVAILABLE
/
NOTDEV:	ASCIZ/(12) NO SUCH DEVICE
/
NO2REG:	ASCIZ/(13) NO TWO REGISTER RELOCATION
/
NOROOM:	ASCIZ/(14) NO ROOM OR QUOTA EXCEEDED 
/
WLERR:	ASCIZ/(15) DSK WRITE LOCKED
/
NOMCOR:	ASCIZ/(16) MONITOR HAS NO FREE TABLE SPACE
/
PARALC:	ASCIZ/(17) PARTIAL DSK SPACE ALLOCATION
/
BLKNOF:	ASCIZ/(20) BLOCK NOT FREE
/
SUPDIR:	ASCIZ/(21) CANNOT SUPERSEDE EXISTING DIRECTORY
/
DELDIR:	ASCIZ/(22) CANNOT DELETE NON-EMPTY UFD
/
NOSFD:	ASCIZ/(23) SFD NOT FOUND
/
SLEMPT:	ASCIZ/(24) SEARCH LIST EMPTY
/
SFDLVL:	ASCIZ/(25) MAXIMUM SFD NESTING LEVEL EXCEEDED
/
UFDEFT:	ASCIZ/(26) CANNOT FIND WRITE-ENABLED DSK
/
LOCSEG:	ASCIZ/(27) HISEG NOT DORMANT
/

	IFE	FINAL,<
	SUBTTL	INSTRUCTION AND CALLI MNEMONICS
>

INST:	MAKNAM<CALL,INIT,←←←,←←←,←←←,←←←,←←←,CALLI,OPEN>
	MAKPRT<4>
	MAKNAM<←←←,←←←,←←←,RENAME,IN,OUT,SETSTS,STATO,STATUS>
	MAKNAM<STATZ,INBUF,OUTBUF,INPUT,OUTPUT,CLOSE,RELEAS,MTAPE,UGETF,USETI>
	MAKNAM<USETO,LOOKUP,ENTER,UJEN,←←←,←←←,←←←,←←←,←←←,←←←>
	MAKNAM<←←←,DFAD,DFSB,DFMP,DFDV,←←←,←←←,←←←,←←←,DMOVE>
	MAKNAM<DMOVN,FIX,←←←,DMOVEM,DMOVNM,FIXR,FLTR,UFA,DFN>
	MAKNAM<FSC,IBP,ILDB,LDB,IDPB,DPB,FAD,FADL,FADM,FADB>
	MAKNAM<FADR,FADRI,FADRM,FADRB,FSB,FSBL,FSBM,FSBB,FSBR,FSBRI>
	MAKNAM<FSBRM,FSBRB,FMP,FMPL,FMPM,FMPB,FMPR,FMPRI,FMPRM,FMPRB>
	MAKNAM<FDV,FDVL,FDVM,FDVB,FDVR,FDVRI,FDVRM,FDVRB,MOVE,MOVEI>
	MAKNAM<MOVEM,MOVES,MOVS,MOVSI,MOVSM,MOVSS,MOVN,MOVNI,MOVNM,MOVNS>
	MAKNAM<MOVM,MOVMI,MOVMM,MOVMS,IMUL,IMULI,IMULM,IMULB,MUL,MULI>
	MAKNAM<MULM,MULB,IDIV,IDIVI,IDIVM,IDIVB,DIV,DIVI,DIVM>
	MAKNAM<DIVB,ASH,ROT,LSH,JFFO,ASHC,ROTC,LSHC,←←←,EXCH>
	MAKNAM<BLT,AOBJP,AOBJN>
	MAKPRT<1>
	MAKPRT<2>
	MAKNAM<XCT,MAP,PUSHJ,PUSH,POP,POPJ,JSR,JSP,JSA,JRA>
	MAKNAM<ADD,ADDI,ADDM,ADDB,SUB,SUBI,SUBM,SUBB,CAI,CAIL>
	MAKNAM<CAIE,CAILE,CAIA,CAIGE,CAIN,CAIG,CAM,CAML,CAME,CAMLE>
	MAKNAM<CAMA,CAMGE,CAMN,CAMG,JUMP,JUMPL,JUMPE,JUMPLE,JUMPA,JUMPGE>
	MAKNAM<JUMPN,JUMPG,SKIP,SKIPL,SKIPE,SKIPLE,SKIPA,SKIPGE,SKIPN,SKIPG>
	MAKNAM<AOJ,AOJL,AOJE,AOJLE,AOJA,AOJGE,AOJN,AOJG,AOS,AOSL>
	MAKNAM<AOSE,AOSLE,AOSA,AOSGE,AOSN,AOSG,SOJ,SOJL,SOJE,SOJLE>
	MAKNAM<SOJA,SOJGE,SOJN,SOJG,SOS,SOSL,SOSE,SOSLE,SOSA,SOSGE>
	MAKNAM<SOSN,SOSG,SETZ,SETZI,SETZM,SETZB,AND,ANDI,ANDM,ANDB>
	MAKNAM<ANDCA,ANDCAI,ANDCAM,ANDCAB,SETM,SETMI,SETMM,SETMB,ANDCM,ANDCMI>
	MAKNAM<ANDCMM,ANDCMB,SETA,SETAI,SETAM,SETAB,XOR,XORI,XORM,XORB>
	MAKNAM<IOR,IORI,IROM,IROB,ANDCB,ANDCBI,ANDCBM,ANDCBB,EQV,EQVI>
	MAKNAM<EQVM,EQVB,SETCA,SETCAI,SETCAM,SETCAB,ORCA,ORCAI,ORCAM,ORCAB>
	MAKNAM<SETCM,SETCMI,SETCMM,SETCMB,ORCM,ORCMI,ORCMM,ORCMB,ORCB,ORCBI>
	MAKNAM<ORCBM,ORCBB,SETO,SETOI,SETOM,SETOB,HLL,HLLI,HLLM,HLLS>
	MAKNAM<HRL,HRLI,HRLM,HRLS,HLLZ,HLLZI,HLLZM,HLLZS,HRLZ,HRLZI>
	MAKNAM<HRLZM,HRLZS,HLLO,HLLOI,HLLOM,HLLOS,HRLO,HRLOI,HRLOM,HRLOS,HLLE>
	MAKNAM<HLLEI,HLLEM,HLLES,HRLE,HRLEI,HRLEM,HRLES,HRR,HRRI,HRRM>
	MAKNAM<HRRS,HLR,HLRI,HLRM,HLRS,HRRZ,HRRZI,HRRZM,HRRZS,HLRZ>
	MAKNAM<HLRZI,HLRZM,HLRZS,HRRO,HRROI,HRROM,HRROS,HLRO,HLROI,HLROM>
	MAKNAM<HLROS,HRRE,HRREI,HRREM,HRRES,HLRE,HLREI,HLREM,HLRES,TRN>
	MAKNAM<TLN,TRNE,TLNE,TRNA,TLNA,TRNN,TLNN,TDN,TSN,TDNE>
	MAKNAM<TSNE,TDNA,TSNA,TDNN,TSNN,TRZ,TLZ,TRZE,TLZE,TRZA>
	MAKNAM<TLZA,TRZN,TLZN,TDZ,TSZ,TDZE,TSZE,TDZA,TSZA,TDZN>
	MAKNAM<TSZN,TRC,TLC,TRCE,TLCE,TRCA,TLCA,TRCN,TLCN,TDC>
	MAKNAM<TSC,TDCE,TSCE,TEDCA,TSCA,TDCN,TSCN,TRO,TLO,TROE>
	MAKNAM<TLOE,TROA,TLOA,TRON,TLON,TDO,TSO,TDOE,TSOE,TDOA>
	MAKNAM<TSOA,TDON,TSON>
	MAKPRT<3>

EXINST:	MAKNAM<←←←,JRST,PORTAL,JRSTF,←←←,HALT,←←←,←←←,←←←,←←←,←←←,JEN>
	MAKNAM<←←←,←←←,←←←,←←←,←←←>
	MAKNAM<JFCL,JFOV,JCRY1,←←←,JCRY0,←←←,JCRY,←←←,JOV>
	MAKNAM<←←←,←←←,←←←,←←←,←←←,←←←,←←←>
	MAKNAM<BLKI,DATAI,BLKO,DATAO,CONO,CONI,CONSZ,CONSO>
	MAKNAM<←←←←←←,←←←←←←,←←←←←←,←←←←←←,←←←←←←,←←←←←←,←←←←←←>
	MAKNAM<TTCALL,INCHRW,OUTCHR,INCHRS,OUTSTR,INCHWL,INCHSL,GETLCH,SETLCH>
	MAKNAM<RESCAN,CLRBFI,CLRBFO,SKPINC,SKPINL,IONEOU,←←←,←←←>

CALTAB:	MAKNAM<LIGHTS,RESET,DDTIN,SETDDT,DDTOUT,DEVCHR,DDTGT>
	MAKNAM<GETCHR,DDTRL,WAIT,CORE,EXIT,UPTCLR,DATE,LOGIN>
	MAKNAM<APRENB,LOGOUT,SWITCH,REASSI,TIMER,MSTIME,GETPPN>
	MAKNAM<TRPSET,TRPJEN,RUNTIM,PJOB,SLEEP,SETPOV,PEEK,GETLIN>
	MAKNAM<RUN,SETUWP,REMAP,GETSEG,GETTAB,SPY,SETNAM,TMPCOR>
	MAKNAM<DSKCHR,SYSSTR,JOBSTR,STRUUO,SYSPHY,FRECHN,DEVTYP>
	MAKNAM<DEVSTS,DEVPPN,SEEK,RTTRP,LOCK,JOBSTS,LOCATE,WHERE>
	MAKNAM<DEVNAM,CTLJOB,GOBSTR,ACTIVA,DEACTI,HPQ,HIBER,WAKE>
	MAKNAM<CHGPPN,SETUUO,DEVGEN,OTHUSR,CHKACC,DEVSIZ,DAEMON>
	MAKNAM<JOBPEK,ATTACH,DAEFIN,FRCUUO,DEVLNM,PATH.,METER.>
	MAKNAM<MTCHR.,JBSET.,POKE.,TRMNO.,TRMOP.,RESDV.,UNLOK.>
	MAKNAM<DISK.,DVRST.,DVURS.>

	IFN	FINAL,<
	LIST
>

	SUBTTL	MAIN LOOP

START:!
RENTER:	RESET
	MOVE	P,[IOWD	LEN,PDL]
	SETZ	F,
	PUSHJ	P,SETIO

NXTBLK:	PUSHJ	P,CRLF
	PUSHJ	P,GETWRD
	HRRZ	CNT,WRD
	HLRZ	T3,WRD
	CAILE	T3,CMDCNT*2
	SETO	T3,

	JUMPL	T3,NXTBK1
	SETZ	T4,
	LSHC	T3,-1
	HLRZ	T5,CMD(T3)
	CAIE	T4,

NXTBK1:	HRRZ	T5,CMD(T3)
	MOVE	T1,WRD
	PUSHJ	P,HAFOCT
	PUSHJ	P,TAB
	PUSHJ	P,TYPHDR
	PUSHJ	P,TWOOCT

	PUSHJ	P,(T5)
	JRST	NXTBLK

	SUBTTL	MAIN SUBROUTINES

NONIMP:	MOVEI	VARPTR,NONXWD
	JRST	LOOP

NONXWD:	SOJL	CNT,(N)
	SOJL	RCNT,(N)
	PUSHJ	P,GETWRD
	PUSHJ	P,RELCLC
	PUSHJ	P,CRLF
	JRST	NONXWD

CODE:	SOJ	CNT,
	PUSHJ	P,CRLF
	MOVEI	RCNT,RELCNT-1
	PUSHJ	P,CODLOC
	JSP	N,CODWRD
	PUSHJ	P,CRLF
	CAIGE	CNT,
	POPJ	P,
	PUSHJ	P,TWOOCT
	JRST	CODE+1

CODLOC:	PUSHJ	P,GETWRD
	PUSHJ	P,RELCLC
	MOVEI	T2,TYMES2
	PUSHJ	P,PUTSTR
	MOVE	T1,WRD
	PUSHJ	P,OCTOUT
	JRST	CRLF

CODWRD:	SOJL	CNT,(N)
	SOJL	RCNT,(N)
	PUSHJ	P,GETWRD
	PUSHJ	P,RELCLC
	MOVE	T5,WRD
	PUSHJ	P,SIXOUT
	PUSHJ	P,ASCOUT
	PUSHJ	P,INSOUT
	PUSHJ	P,CRLF
	JRST	CODWRD

HISEG:	PUSHJ	P,CRLF
	PUSHJ	P,GETWRD
	MOVEI	T2,TYMES6
	HLRE	T1,WRD
	CAIE	T1,0
	MOVEI	T2,TYMES7
	PUSHJ	P,PUTSTR
	PUSHJ	P,TAB
	PUSHJ	P,TAB
	MOVEI	T2,TYMES5
	PUSHJ	P,PUTSTR
	HRRZ	T1,WRD
	PUSHJ	P,OCTOUT
	PUSHJ	P,CRLF
	SOJE	CNT,CPOPJ

	PUSHJ	P,GETWRD
	MOVEI	T2,TYMES8
	PUSHJ	P,PUTSTR
	HRRZ	T1,WRD
	PUSHJ	P,OCTOUT
	PUSHJ	P,TAB
	PUSHJ	P,TAB
	MOVEI	T2,TYMES9
	PUSHJ	P,PUTSTR
	HLRZ	T1,WRD
	PUSHJ	P,OCTOUT
	JRST	CRLF

SYMBOL:	MOVEI	VARPTR,SYMWRD
	JRST	LOOP

SYMWRD:	SUBI	CNT,2
	SUBI	RCNT,2
	JUMPL	CNT,(N)
	JUMPL	RCNT,(N)
	PUSHJ	P,GETWRD
	PUSHJ	P,RELCLC
	PUSHJ	P,RADOUT
	PUSHJ	P,CRLF
	PUSHJ	P,GETWRD
	PUSHJ	P,RELCLC
	MOVE	T1,WRD
	PUSHJ	P,HAFOCT
	PUSHJ	P,CRLF
	JRST	SYMWRD

ENTR:	MOVEI	VARPTR,ENTWRD
	JRST	LOOP

ENTWRD:	SOJL	CNT,(N)
	SOJL	RCNT,(N)
	PUSHJ	P,GETWRD
	MOVEI	T2,TYMES4
	PUSHJ	P,PUTSTR
	.GTSYM	T1,
	PUSHJ	P,RAD50
	PUSHJ	P,CRLF
	JRST	ENTWRD

ENDBLK:	PUSHJ	P,CRLF
	PUSHJ	P,GETWRD
	PUSHJ	P,RELCLC
	PUSHJ	P,HAFOCT
	SOJG	CNT,ENDBLK
	JRST	CRLF

NAME:	PUSHJ	P,CRLF
	PUSHJ	P,GETWRD
	MOVEI	T2,TYMES1
	PUSHJ	P,PUTSTR
	.GTSYM	T1,
	PUSHJ	P,RAD50
	PUSHJ	P,CRLF
	SOJN	CNT,.+2
	POPJ	P,
	PUSHJ	P,GETWRD
	.GTPRO	T3,
	SETZ	T4,
	LSHC	T3,-1
	HLR	T2,PROTYP(T3)
	CAIE	T4,
	HRR	T2,PROTYP(T3)
	PUSHJ	P,PUTSTR
	JRST	CRLF

STARD:	PUSHJ	P,CRLF
	PUSHJ	P,GETWRD
	MOVEI	T2,TYMES3
	PUSHJ	P,PUTSTR
	MOVE	T1,WRD
	PUSHJ	P,OCTOUT
	JRST	CRLF

INTERN:	JRST	NONIMP

LINK:	MOVEI	VARPTR,LNKWRD
	JRST	LOOP

LNKWRD:	SOJL	CNT,(N)
	SOJL	RCNT,(N)
	PUSHJ	P,GETWRD
	SETZ	T3,
	MOVEI	T2,(CNT)
	LSHC	T2,-1
	MOVEI	T2,TYMS10
	CAIN	T3,0
	MOVEI	T2,TYMS11
	PUSHJ	P,PUTSTR
	MOVEI	T1,(WRD)
	PUSHJ	P,OCTOUT
	PUSHJ	P,CRLF
	JRST	LNKWRD

LDREQ:	MOVEI	VARPTR,LDWRD
	SOJ	CNT,
	JRST	LOOP

LDWRD:	JUMPL	CNT,(N)
	JUMPL	RCNT,(N)
	PUSHJ	P,LDOUT
	PUSHJ	P,CRLF
	SUBI	CNT,3
	SUBI	RCNT,3
	JRST	LDWRD

LDOUT:	PUSHJ	P,GETWRD
	MOVEI	T2,FILMES
	PUSHJ	P,PUTSTR
	MOVE	T5,WRD
	PUSHJ	P,SIXOUT
	PUSHJ	P,CRLF
	PUSHJ	P,GETWRD
	MOVEI	T2,PPNMES
	PUSHJ	P,PUTSTR
	PUSHJ	P,PPNOUT
	PUSHJ	P,GETWRD
	MOVEI	T2,DEVMES
	PUSHJ	P,PUTSTR
	MOVE	T5,WRD
	PUSHJ	P,SIXOUT
	JRST	CRLF

COMMON:	JRST	NONIMP

SPARSE:	JRST	NONIMP

LOOP:	PUSHJ	P,CRLF
	MOVEI	RCNT,RELCNT
	JSP	N,@VARPTR
	CAIGE	CNT,
	POPJ	P,
	PUSHJ	P,TWOOCT
	AOJ	CNT,
	JRST	LOOP
	SUBTTL	INPUT-OUTPUT ROUTINES

SETIO:	OUTSTR	[BYTE(7)  15,12,"*"]
	PUSHJ	P,GETFIL
	TRZN	F,CHRTYP
	JRST	SETIO
	TRNN	F,AROW.F
	JRST	SETIN
	PUSHJ	P,OUTFIL
	PUSHJ	P,GETFIL
	PUSHJ	P,INFILE
	POPJ	P,
SETIN:	PUSHJ	P,INFILE
	SETZB	FILE.,EXT.
	MOVSI	DEV.,'TTY'
	SETZ	PPN.,
	PUSHJ	P,OUTFIL
	POPJ	P,

GETFIL:	SETZB	DEV.,PPN.
	SETZB	FILE.,EXT.
	MOVE	T6,[POINT 6,FILE.]
	MOVEI	T5,6
GETFL2:	PUSHJ	P,GETCHR
	MOVEI	T2,BRKCNT
	MOVE	T3,BRKTAB(T2)
	CAIN	T1,(T3)
	JRST	FOUND
	SOJGE	T2,.-3
	SOJL	T5,GETFL2
	SUBI	T1,40
	IDPB	T1,T6
	TRO	F,CHRTYP
	JRST	GETFL2
FOUND:	MOVSS	T3
	JRST	(T3)

DEVICE:	MOVE	T1,FILE.
	MOVEM	T1,DEV.
	JRST	GETFIL+1

EXT:	MOVEI	T5,3
	MOVE	T6,[POINT 6,EXT.]
	JRST	GETFL2

PPN:	PUSHJ	P,GETOCT
	HRLM	T2,PPN.
	PUSHJ	P,GETOCT
	HRRM	T2,PPN.
	TRZE	F,DONE.F
	JRST	FOUND
	SETO	T5,
	JRST	GETFL2

ARROW:	TROE	F,AROW.F
	JRST	TWOARW
	JUMPN	DEV.,.+2
	MOVSI	DEV.,'DSK'
	POPJ	P,
TWOARW:	OUTSTR	[ASCIZ/?TWO BACK ARROWS ILLEGAL
/]

EATMUP:	PUSHJ	P,GETCHR
	JUMPN	T1,EATMUP
	JRST	RENTER

GETOCT:	SETZ	T2,
	PUSHJ	P,GETCHR
	CAIN	T1,40
	JRST	GETOCT+1
	MOVEI	T4,LINCNT
	MOVE	T3,LINTAB(T4)
	CAIN	T1,(T3)
	JRST	LINDON
	SOJGE	T4,.-3
	CAIE	T1,"]"
	CAIN	T1,","
	POPJ	P,
	CAIL	T1,"0"
	CAILE	T1,"9"
	JRST	BADCHR
	LSH	T2,3
	ADDI	T2,-60(T1)
	JRST	GETOCT+1

LINDON:	TROA	F,DONE.F
CPOPJ1:	AOS	(P)
CPOPJ:	POPJ	P,

GETCHR:	INCHWL	T1
	CAIN	T1,32
	EXIT
	CAIL	T1,"A"
	CAILE	T1,"Z"
	JRST	.+2
	POPJ	P,
	CAIL	T1,"0"
	CAILE	T1,"9"
	JRST	.+2
	POPJ	P,
	CAIE	T1,33
	CAIN	T1,175
	JRST	GETLF+1
	CAIN	T1,15
	JRST	GETLF
	CAIN	T1,12
	JRST	GETLF+1
	PUSH	P,T2
	PUSH	P,T3
	MOVEI	T2,SPCCNT
	MOVE	T3,SPCCHR(T2)
	CAIN	T1,(T3)
	JRST	CHROK
	SOJGE	T2,.-3

BADCHR:	OUTSTR	[ASCIZ/?ILLEGAL CHARACTER "/]
	OUTCHR	T1
	OUTSTR	[ASCIZ/"
/]
	JRST	EATMUP
CHROK:	POP	P,T3
	POP	P,T2
	POPJ	P,
GETLF:	INCHWL	T1
	SETZ	T1,
	POPJ	P,

OUTFIL:	MOVEM	DEV.,OPBLKO+1
	OPEN	ODEV,OPBLKO
	JRST	NOTAV2
	MOVEI	T1,ODEV
	DEVCHR	T1,
	TLNN	T1,DV.DIR
	JRST	OUTIT
	SETZ	DEV.,
	HRRI	EXT.,
	JUMPN	EXT.,.+2
	MOVSI	EXT.,'LST'
	ENTER	ODEV,FILE.
	JRST	OUTFER
	JRST	OUTIT

OUTFER:	OUTSTR	[ASCIZ/?ENTER/]
	PUSHJ	P,GETCHR
	JUMPN	T1,.-1
FILERR:	OUTSTR	[ASCIZ/ FAILURE /]
	HRRZ	T1,EXT.
	SETZ	T2,
	LSHC	T1,-1
	ROT	T2,1
	MOVE	T1,ERRTAB(T1)
	JUMPN	T2,.+2
	MOVSS	T1
	OUTSTR	(T1)
	JRST	RENTER

INFILE:	MOVEM	DEV.,OPBLKI+1
	OPEN	IDEV,OPBLKI
	JRST	NOTAVL
	MOVEI	T1,IDEV
	DEVCHR	T1,
	TLNN	T1,DV.DIR
	JRST	GETIN
	PUSH	P,PPN.
	LOOKUP	IDEV,FILE.
	JRST	.+3
	POP	P,PPN.
	JRST	GETIN
	POP	P,PPN.
	MOVSI	EXT.,'REL'
	LOOKUP	IDEV,FILE.
	JRST	.+2
	JRST	GETIN
	TDZ	EXT.,EXT.

INFERR:	OUTSTR	[ASCIZ/?LOOKUP/]
	JRST	FILERR
OUTIT:	OUT	ODEV,
	POPJ	P,
	OUTSTR	[ASCIZ/?OUTPUT FAILURE /]
	GETSTS	ODEV,T1
OUTERR:	PUSHJ	P,TTYOCT
	OUTSTR	[BYTE(7)15,12]
	RELEAS	ODEV,
	JRST	RENTER
PUTOUT:	PUSHJ	P,OUTIT
PUTCHR:	SOSGE	OBUF+2
	JRST	PUTOUT
	IDPB	T1,OBUF+1
	POPJ	P,

PUTSTR:	HRLI	T2,440700
	ILDB	T1,T2
	JUMPE	T1,CPOPJ
	PUSHJ	P,PUTCHR
	JRST	PUTSTR+1

GETIN:	IN	IDEV,
	POPJ	P,
	STATZ	IDEV,EOF
	JRST	FINISH
	OUTSTR	[ASCIZ/?INPUT FAILURE /]
	GETSTS	IDEV,T1
	JRST	OUTERR
GETIT:	PUSHJ	P,GETIN
GETWRD:	SOSGE	IBUF+2
	JRST	GETIT
	ILDB	WRD,IBUF+1
	JRST	FULOCT

TTYOCT:	SETZ	T2,
	LSHC	T1,-3
	ROT	T2,3
	HRLM	T2,(P)
	JUMPE	T1,.+2
	PUSHJ	P,TTYOCT
	HLRZ	T1,(P)
	ADDI	T1,60
	OUTCHR	T1
	POPJ	P,

NOTAV2:	TRNN	F,AROW.F
	JRST	NOTAVL
	PUSHJ	P,GETCHR
	JUMPN	T1,.-1
NOTAVL:	OUTSTR	[ASCIZ/?DEVICE /]
	MOVE	T1,DEV.
	PUSHJ	P,TTYSIX
	OUTSTR	[ASCIZ/ IS NOT AVAILABLE
/]
	JRST	RENTER

TTYSIX:	MOVEM	T1,T2
	SETZ	T1,
	JUMPE	T2,CPOPJ
	LSHC	T1,6
	ADDI	T1,40
	OUTCHR	T1
	JRST	TTYSIX+1

FINISH:	RELEAS	IDEV,
	RELEAS	ODEV,
	JRST	RENTER

	SUBTTL	GENERAL UTILITY SUBROUTINES

TAB:	MOVEI	T1,11
	JRST	PUTCHR

SPACE:	MOVEI	T1," "
	JRST	PUTCHR

INDOUT:	MOVEI	T1,"@"
	JRST	PUTCHR

COMMA:	MOVEI	T1,","
	JRST	PUTCHR

COMM2:	MOVEI	T1,","
	PUSHJ	P,PUTCHR
	JRST	PUTCHR

CRLF:	MOVEI	T1,15
	PUSHJ	P,PUTCHR
	MOVEI	T1,12
	JRST	PUTCHR

OCTOUT:	SETZ	T2,
	LSHC	T1,-3
	ROT	T2,3
	HRLM	T2,(P)
	JUMPE	T1,OCT1
	PUSHJ	P,OCTOUT
OCT1:	HLRZ	T1,(P)
	ADDI	T1,60
	JRST	PUTCHR

SIXOUT:	MOVE	T3,[POINT  6,T5]
	MOVEI	T2,6
	ILDB	T1,T3
	ADDI	T1,40
	PUSHJ	P,PUTCHR
	SOJG	T2,SIXOUT+2
	JRST	TAB

ASCOUT:	MOVEI	T3,4
	MOVE	T4,[POINT 7,T5]
	ILDB	T1,T4
	CAIGE	T1,40
	MOVEI	T1,40
	PUSHJ	P,PUTCHR
	SOJGE	T3,.-4
	JRST	TAB

FULOCT:	HLRZ	T4,WRD
	PUSHJ	P,FULL
	HRRZ	T4,WRD
	PUSHJ	P,FULL
	PUSHJ	P,TAB
	JRST	TAB

FULL:	JUMPN	T4,.+3
	MOVEI	T2,5
	JRST	FUL1
	MOVE	T1,T4
	JFFO	T1,.+1
	SUBI	T2,22
	CAIGE	T2,3
	JRST	FUL2
	IDIVI	T2,3
FUL1:	MOVEI	T1,"0"
	PUSHJ	P,PUTCHR
	SOJG	T2,.-1
	MOVE	T1,T4
FUL2:	JRST	OCTOUT

HAFOCT:	HLRZ	T1,WRD
	PUSHJ	P,OCTOUT
	PUSHJ	P,COMM2
	HRRZ	T1,WRD
	JRST	OCTOUT

TWOOCT:	PUSHJ	P,CRLF
	PUSHJ	P,GETWRD
	MOVE	RELWRD,WRD
	MOVE	T3,WRD
	MOVEI	T4,20
TWOCT1:	SETZ	T2,
	LSHC	T2,2
	MOVE	T1,T2
	PUSHJ	P,OCTOUT
	PUSHJ	P,COMMA
	SOJGE	T4,TWOCT1
	SETZ	T2,
	LSHC	T2,2
	MOVE	T1,T2
	PUSHJ	P,OCTOUT
	JRST	CRLF

PPNOUT:	MOVEI	T1,"["
	PUSHJ	P,PUTCHR
	HLRZ	T1,WRD
	PUSHJ	P,OCTOUT
	PUSHJ	P,COMMA
	HRRZ	T1,WRD
	PUSHJ	P,OCTOUT
	MOVEI	T1,"]"
	PUSHJ	P,PUTCHR
	JRST	CRLF

TYPE:	MOVEI	T2,TYMES
	PUSHJ	P,PUTSTR
	HLRZ	T1,WRD
	JRST	OCTOUT

INXOUT:	MOVEI	T1,"("
	PUSHJ	P,PUTCHR
	MOVE	T1,T2
	PUSHJ	P,OCTOUT
	MOVEI	T1,")"
	JRST	PUTCHR

RADOUT:	LDB	T1,[POINT 4,WRD,3]
	LSH	T1,2
	PUSHJ	P,OCTOUT
	PUSHJ	P,SPACE
	.GTSYM	T1,
RAD50:	IDIVI	T1,50
	HRLM	T2,(P)
	JUMPE	T1,.+2
	PUSHJ	P,RAD50
	HLRZ	T1,(P)
	CAIN	T1,
	POPJ	P,
	CAILE	T1,44
	JRST	SPCIAL
	ADDI	T1,57
	CAIL	T1,72
	ADDI	T1,7
	JRST	PUTCHR
SPCIAL:	CAIN	T1,45
	MOVEI	T1,"."
	CAIN	T1,46
	MOVEI	T1,"$"
	CAIN	T1,47
	MOVEI	T1,"%"
	JRST	PUTCHR

RELCLC:	SETZ	T5,
	LSHC	T5,2
	LSH	T5,1
	MOVEI	T2,RELMES(T5)
	PUSHJ	P,PUTSTR
	PUSHJ	P,TAB
	JRST	TAB

TYPHDR:	PUSHJ	P,TAB
	PUSHJ	P,TYPE
	JUMPL	T3,TYHDR
	HLR	T2,CMDMES(T3)
	CAIE	T4,
TYHDR:	HRR	T2,CMDMES(T3)
	JRST	PUTSTR

INSOUT:	PUSHJ	P,TAB
	TLZ	F,AC.F
	.GTINS	T1,
	CAILE	T1,40
	CAILE	T1,700
	POPJ	P,
	TLNE	WRD,IND.F!INX.F
	JRST	INS1
	CAIN	T1,47
	JRST	CALLIS

INS1:	MOVE	T5,INST-40(T1)
	PUSHJ	P,INSCHK
	PUSHJ	P,INS2
	PUSHJ	P,SIXOUT

	TLNN	F,AC.F
	PUSHJ	P,INSAC
	PUSHJ	P,INSEFF
	POPJ	P,

CALLIS:	HRRE	T2,WRD
	AOJ	T2,
	JUMPL	T2,INS1
	CAILE	T2,124
	JRST	INS1
	MOVE	T5,CALTAB(T2)
	PUSHJ	P,SIXOUT
	PUSHJ	P,INSAC
	JRST	TAB

INSAC:	.GTACM	T1,
	CAIN	T1,
	POPJ	P,
	PUSHJ	P,OCTOUT
	JRST	COMMA

INSEFF:	TLNE	WRD,IND.F
	PUSHJ	P,INDOUT
	HRRZ	T1,WRD
	PUSHJ	P,OCTOUT
	.GTINX	T1,
	MOVE	T2,T1
	CAIE	T1,
	PUSHJ	P,INXOUT
	JRST	TAB

INSCHK:	AOS	(P)
	SETCAM	T5,T2
	TLNN	T2,PRT.F
	SOS	(P)
	POPJ	P,

INS2:	TLO	F,AC.F
	HRRZ	T1,T5
	JUMPE	T1,INSNO
	SUBI	T1,1
	LSH	T1,4
	.GTACM	T2,
	ADD	T2,T1
	MOVE	T5,EXINST+1(T2)
	PUSHJ	P,INSCHK
	CAIA
	POPJ	P,

INS3:	HRLS	T5
	PUSHJ	P,INSCHK
	JRST	INSNO
	CAIN	T1,60
	SOJ	T1,
	MOVE	T5,EXINST+1(T1)
	TLZ	F,AC.F
	POPJ	P,

INSNO:	POP	P,T1
	POPJ	P,

	END	START